草庐IT

TypeScript 运算符

全部标签

c++ - 在 C++ 的特定情况下,是否在没有删除新运算符的情况下创建了对象

如果我们有如下代码片段:MyObjectmy_object=MyObject(0);my_object=MyObject(1);MyObject(0)发生了什么?删除了吗?看看我读到的关于它的内容,只有当我们离开创作范围时,它才应该被删除,所以答案可能是否定的。如果是这种情况,除了使用指针之外,还有什么方法可以显式删除它吗? 最佳答案 MyObjectmy_object=MyObject(0);此行使用MyObject的构造函数在堆栈上创建了my_object,该构造函数可以接受int。my_object=MyObject(1);这

c++ - 为什么要用友元函数来定义比较运算符?

来自http://www.learncpp.com/cpp-tutorial/142-function-template-instances/classCents{private:intm_nCents;public:Cents(intnCents):m_nCents(nCents){}friendbooloperator>(Cents&c1,Cents&c2)//c2.m_nCents)?true:false;}};我们也可以这样实现:classCents{private:intm_nCents;public:Cents(intnCents):m_nCents(nCents){}bo

c++ - 复制构造函数和赋值运算符实现选择 -

我最近重新访问了这里看到的复制构造函数、赋值运算符、复制交换idom:Whatisthecopy-and-swapidiom?和许多其他地方-上面的链接是一篇很棒的帖子-但我还有几个问题-这些问题在很多地方都有答案,在stackoverflow和许多其他网站上,但我没有看到很多一致性-1-你是否应该在我们为复制构造函数中的深层复制分配新内存的区域周围使用try-catch?(这两种方式我都看到了)2-关于复制构造函数和赋值运算符的继承,什么时候应该调用基类函数,什么时候这些函数应该是虚函数?3-std::copy是在复制构造函数中复制内存的最佳方式吗?我用memcpy看过它,也看到其他

c++ - 如何使用 std::rel_ops 自动提供比较运算符?

这个问题在这里已经有了答案:Idiomaticuseofstd::rel_ops(4个答案)关闭9年前。如何获取运算符>,>=,,和!=来自==和?标准标题定义一个命名空间std::rel_ops,它根据运算符==定义上述运算符和,但我不知道如何使用它(哄骗我的代码将此类定义用于:std::sort(v.begin(),v.end(),std::greater);我在其中定义了非成员运算符:booloperator如果我#include并指定usingnamespacestd::rel_ops;编译器仍然提示binary'>':nooperatorfoundwhichtakesalef

c++ - 慢异或运算符

编辑:确实,我的计时代码中有一个奇怪的错误导致了这些结果。当我修复我的错误时,智能版本如预期的那样更快结束。我的计时代码如下所示:boolx=false;before=now();for(inti=0;i我已经完成了^=来阻止我的编译器优化for循环。但我认为^=以某种方式与两个xor函数进行了奇怪的交互。我更改了我的计时代码以简单地填写一个异或结果数组,然后在计时代码之外对该数组进行计算。那就是固定的东西。我应该删除这个问题吗?结束编辑我定义了两个C++函数如下:boolsmart_xor(boola,boolb){returna^b;}booldumb_xor(boola,bool

c++ - C++ 中的赋值运算符返回右值还是左值?

C++中的赋值运算符返回右值还是左值?如果它是左值,两个参数中的哪一个会在这里递增?(a=b)++ 最佳答案 它返回一个左值。根据§5.17:Theassignmentoperator(=)andthecompoundassignmentoperatorsallgroupright-to-left.Allrequireamodifiablelvalueastheirleftoperandandreturnanlvaluereferringtotheleftoperand.如果那些对象有一个用户定义的赋值运算符,那么它取决于opera

c++ - 为什么随机访问迭代器的算术运算符接受/返回 int 而不是 size_t?

由于std::vector上的大多数操作都需要/返回size_t-这就是我用于索引的类型。但现在我已经启用所有编译器警告来修复一些我知道的有符号/无符号转换问题,这条消息让我感到惊讶:warningC4365:'argument':conversionfrom'size_t'to'__w64int',signed/unsignedmismatch它是由这段代码生成的:std::vectorv;size_tidx=0;v.insert(v.begin()+idx+1,0);我收到很多其他类似的消息,建议迭代器的算术运算符接受并返回int。为什么不是size_t?修复所有这些消息很痛苦,并

c++ -::运算符能否出现在与限定名称查找中的范围解析不同的上下文中?

作为用于限定名称查找目的的已知范围解析运算符。但是::返回的值是什么?据我了解,它是后缀一元运算符。请考虑以下事项:namespaceA{//something}A:://error:expectedunqualified-idbefore‘int’intmain(){}你能解释一下这种行为吗? 最佳答案 范围解析运算符::只是一个语法运算符,没有其他语义。也就是说,有些运算符只对语言的语法有贡献,而其他运算符也对程序的语义/运行时行为有贡献,并且可以自定义语义。这就是运算符重载。 关于

c++ - 编译器生成的赋值运算符不安全吗?

据我了解,C++编译器生成的赋值运算符如下:structX{std::vectormember1;std::vectormember2;X&operator=(constX&other){member1=other.member1;member2=other.member2;}};这个异常不安全吗?如果member2=other.member2抛出异常,那么原始赋值的副作用不会被撤销。 最佳答案 使用4levelexceptionsafety系统:不扔强保证——操作完成,或完全回滚基本保证——不变量被保留,没有资源泄露没有保证如果对

c++ - end() 迭代器的算术运算

设A为std::vector,这是明确的吗?if(!A.empty())std::vector::iteratormyBack=A.end()-1;是end迭代器只适用于等式和不等式检查?或者只要我留在容器中,我就可以执行一些指针运算?在我的平台上,此代码有效。我想知道这是否是可移植的。 最佳答案 它是完全有效的,因为vector::iterator是一个随机访问迭代器。您可以对其执行算术运算,并且它不依赖于平台。std::vector::iteratorit=A.end();while(it!=A.begin()){--it;//